Registered S3 method overwritten by 'data.table':
method from
print.data.table
data.table 1.12.8 using 8 threads (see ?getDTthreads). Latest news: r-datatable.com
Evolution in Switzerland and Western Europe
The figures do not represent the same thing in each country, depending on the extent of the screening tests carried out. Regardless of this problem, the weekly and daily trend curves allow you to get an idea of the foreseeable evolution for the next days (assuming that the screening strategy does not change over time). Respectively, it provides an indication of a possible inflection of the progression of the epidemic in the near future.
What Happened in Hubei Province (China)





Comparison of Number of Confirmed Cases in Western Europe


Comparison of Number of Deaths in Western Europe


Comparison of Number of Recovered Cases in Western Europe
WARNING: The figures seem to be wrong on March 23, 2020.


Comparison of Number of Active Cases in Western Europe
WARNING: The figures seem to be wrong on March 23, 2020.


LS0tCnRpdGxlOiAiQ09WSUQtMTkgaW4gU3dpdHplcmxhbmQgYW5kIFdlc3Rlcm4gRXVyb3BlIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jOiB5ZXMKICBodG1sX25vdGVib29rOiAKICAgIGZpZ19oZWlnaHQ6IDUKICAgIGZpZ193aWR0aDogNwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvYzogeWVzCiAgd29yZF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDogZGVmYXVsdApkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWSAtICVIOiVNJylgIgphdXRob3I6ICJQaGlsaXBwZSBEb2NvdXJ0IgotLS0KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGRhdGEudGFibGUpCgpnZXRfdGltZXNlcmllc19hc192ZWN0b3IgPC0gZnVuY3Rpb24oZGYpIHsKICB0bXAgPC0gc3Vic2V0KGRmLCBzZWxlY3QgPSAtYygxOjQpKQogIHRtcCA8LSBzYXBwbHkoYXMudmVjdG9yKHRyYW5zcG9zZSh0bXApKSwgYXMuaW50ZWdlcikKICByZXR1cm4odG1wKQp9CgpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5IDwtIGZ1bmN0aW9uKGNvdW50cnkuY29uZmlybWVkLCBjb3VudHJ5LmRlYXRocywgY291bnRyeS5yZWNvdmVyZWQsIGNvdW50cnkubmFtZSwgcHVibGljLnNwYWNlcy5jbG9zZWQuYXQ9TkEsIGNvbmZpbmVtZW50LmF0PU5BLCB0cmVuZC5hbmdsZT0yMCkgewogICAgZGF5LmNvdW50IDwtIG5yb3coY291bnRyeS5jb25maXJtZWQpCiAgeWxpbSA8LSBjKDAsIDEuMyAqIG1heChjb3VudHJ5LmNvbmZpcm1lZCwgbmEucm0gPSBUUlVFKSkKICBkYXkuc3RhcnQgPC0gbWluKGMoNDUsIHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0LCBjb25maW5lbWVudC5hdCksIG5hLnJtID0gVFJVRSkKICBwbG90KGNvdW50cnkuY29uZmlybWVkLCBtYWluPSBwYXN0ZSgiQ2FzZXMgaW4iLCBjb3VudHJ5Lm5hbWUpLCB0eXBlID0gIm8iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIiwgY29sID0gInJlZCIsIHhsaW0gPSAgYyhkYXkuc3RhcnQsIGRheS5jb3VudCArIDcpLCB5bGltID0geWxpbSkKICBsaW5lcyhzZXEoMSwgbGVuZ3RoKGNvdW50cnkuZGVhdGhzKSksIGNvdW50cnkuZGVhdGhzLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBsdHkgPSAxLCBsdyA9IDEpCiAgbGluZXMoc2VxKDEsIGxlbmd0aChjb3VudHJ5LnJlY292ZXJlZCkpLCBjb3VudHJ5LnJlY292ZXJlZCwgdHlwZSA9ICJsIiwgY29sID0gImdyZWVuIiwgbHR5ID0gMSwgbHcgPSAxKQogIGdyaWQoKQogIGF4aXMoc2lkZSA9IDEsIGF0ID0gc2VxKGRheS5zdGFydCAlLyUgNSAqIDUsIGRheS5jb3VudCwgNSkpCiAgCiAgIyBUcmVuZCBiYXNlZCBvbiBsYXN0IHR3byBvYnNlcnZhdGlvbnMgKGxhc3QgZGF5KS4KICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gMikKICBkeSA8LWxhc3QuY29uZmlybWVkWzJdIC0gbGFzdC5jb25maXJtZWRbMV0KICBzbG9wZSA8LSBkeQogIHUgPC0gYygxLCBkeSkKICBhIDwtIGxhc3QuY29uZmlybWVkWzFdIC0gKGRheS5jb3VudCAtIDEpICogc2xvcGUKICBhYmxpbmUoYSA9IGEsIGIgPSBzbG9wZSwgY29sID0gInZpb2xldCIsIGx3ID0gMS41LCBsdHkgPSA0KQogIGxhc3QucHJvZ3Jlc3Npb24ucGN0IDwtIHJvdW5kKCgxMDAgKiBkeSkgLyBsYXN0LmNvbmZpcm1lZFsxXSkKICB0ZXh0KHggPSBkYXkuY291bnQgLSA0LCB5ID0gMC41ICogeWxpbVsyXSwgcGFzdGUoZHksICJjYXNlcy9kYXlcbkV4dHJhcG9sYXRpb246IiwgZHkgKiA3LCAiY2FzZS93LlxuIiwgbGFzdC5wcm9ncmVzc2lvbi5wY3QsICIlIHByb2dyZXNzIGxhc3QgZGF5IiksIHNydCA9IHRyZW5kLmFuZ2xlLCBjb2wgPSAidmlvbGV0IikKICAKICAjIFRyZW5kIGJhc2VkIG9uIGxhc3QgOCBvYnNlcnZhdGlvbnMgKDcgaW50ZXJ2YWxzLCBvbmUgd2VlaykKICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gOCkKICBkeSA8LWxhc3QuY29uZmlybWVkWzhdIC0gbGFzdC5jb25maXJtZWRbMV0KICBzbG9wZSA8LSBkeSAvIDcKICB1IDwtIGMoNywgZHkpCiAgYSA8LSBsYXN0LmNvbmZpcm1lZFsxXSAtIChkYXkuY291bnQgLSA3KSAqIHNsb3BlCiAgYWJsaW5lKGEgPSBhLCBiID0gc2xvcGUsIGNvbCA9ICJibGFjayIsIGx3ID0gMS41LCBsdHkgPSA0KQogIGxhc3QucHJvZ3Jlc3Npb24ucGN0IDwtIHJvdW5kKCgxMDAgKiBkeSkgLyBsYXN0LmNvbmZpcm1lZFsxXSkKICB0ZXh0KHggPSBkYXkuY291bnQgLSA4LCB5ID0gKDAuODggLSAodHJlbmQuYW5nbGUvMzAwMCkpICogeWxpbVsyXSwgcGFzdGUoZHksICJjYXNlcy93LlxuQXZnOiIsIGR5ICUvJSA3LCAiY2FzZS9kYXlcbiIsIGxhc3QucHJvZ3Jlc3Npb24ucGN0LCAiJSBwcm9ncmVzcyBsYXN0IHdlZWsiKSwgc3J0ID0gdHJlbmQuYW5nbGUsIGNvbCA9ICJibGFjayIpCiAgCiAgIyBTaG93IHNwZWNpYWwgbWVhc3VyZXMgYWdhaW5zdCBwcm9wYWdhdGlvbi4KICB5cG9zID0gbWF4KGNvdW50cnkuY29uZmlybWVkLCBuYS5ybSA9IFRSVUUpICUvJSAzCiAgaWYgKCFpcy5uYShwdWJsaWMuc3BhY2VzLmNsb3NlZC5hdCkpIHsKICAgIGFibGluZSh2ID0gcHVibGljLnNwYWNlcy5jbG9zZWQuYXQsIGNvbCA9ICJibHVlIiwgbHcgPSAxLCBsdHkgPSA1KQogICAgdGV4dCh4ID0gcHVibGljLnNwYWNlcy5jbG9zZWQuYXQgLSAxLCB5ID0geXBvcywgIkFsbCBwdWJsaWMgc3BhY2VzIGFyZSBjbG9zZWQiLCBjb2wgPSAiYmx1ZSIsIHNydCA9IDkwKQogIH0KICBpZiAoIWlzLm5hKGNvbmZpbmVtZW50LmF0KSkgewogICAgYWJsaW5lKHYgPSBjb25maW5lbWVudC5hdCwgY29sID0gInJlZCIsIGx3ID0gMSwgbHR5ID0gNSkKICAgIHRleHQoeCA9IGNvbmZpbmVtZW50LmF0IC0gMSwgeSA9IHlwb3MsICJQb3B1bGF0aW9uIGlzIGNvbmZpbmVkIiwgY29sID0gInJlZCIsIHNydCA9IDkwKQogIH0KICAKICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKCJDb25maXJtZWQiLCAiRGVhdGhzIiwgIlJlY292ZXJlZCIsICJDb25maXJtZWQgdHJlbmQgYmFzZWQgb24gbGFzdCBkYXkiLCAiQ29uZmlybWVkIHRyZW5kIGJhc2VkIG9uIGxhc3Qgd2VlayIpLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siLCAiZ3JlZW4iLCAidmlvbGV0IiwgImJsYWNrIiksIGx0eSA9IGMocmVwKDEsIDMpLCAyLCAzKSwgbHcgPSBjKHJlcCgxLCAzKSwgMS41LCAxLjUpKQogIAogIGRpZmZzIDwtIGRpZmYoY291bnRyeS5jb25maXJtZWQpCiAgcGxvdChzZXEoMiwgZGF5LmNvdW50KSwgZGlmZnMsIHR5cGUgPSAiaCIsIGNvbCA9ICJibHVlIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IENvbmZpcm1lZCBDYXNlcyBwZXIgRGF5IiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBDYXNlcyBwZXIgRGF5IiwgbHdkID0gNSkKICBncmlkKCkKICAKICBkaWZmcyA8LSBkaWZmKGNvdW50cnkuZGVhdGhzKQogIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAiYmxhY2siLCB4bGltID0gIGMoZGF5LnN0YXJ0ICsgMSwgZGF5LmNvdW50KSwgbWFpbiA9IHBhc3RlKCJOZXcgRGVhdGhzIHBlciBEYXkiLCBjb3VudHJ5Lm5hbWUsIHNlcCA9ICIgaW4gIiksIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IERlYXRocyBwZXIgRGF5IiwgbHdkID0gNSkKICBncmlkKCkKICAKICBpZiAoIWlzLm5hKGNvdW50cnkucmVjb3ZlcmVkKSkgewogICAgZGlmZnMgPC0gZGlmZihjb3VudHJ5LnJlY292ZXJlZCkKICAgIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAiZ3JlZW4iLCB4bGltID0gIGMoZGF5LnN0YXJ0ICsgMSwgZGF5LmNvdW50KSwgIG1haW4gPSBwYXN0ZSgiTmV3IFJlY292ZXJlZCBDYXNlcyBwZXIgRGF5IGluIiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSIsIGx3ZCA9IDUpCiAgICBncmlkKCkKICAgIAogICAgZGlmZnMgPC0gZGlmZihjb3VudHJ5LmNvbmZpcm1lZCAtIChjb3VudHJ5LmRlYXRocyArIGNvdW50cnkucmVjb3ZlcmVkKSkKICAgIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAicmVkIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IEFjdGl2ZSBDYXNlcyBwZXIgRGF5IiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSIsIGx3ZD01KQogICAgZ3JpZCgpCiAgfQp9Cgpjb3ZpZCA8LSByZWFkLmNzdigiY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMvdGltZV9zZXJpZXNfY292aWQxOV9jb25maXJtZWRfZ2xvYmFsLmNzdiIpCmNvdmlkLmRlYXRocyA8LSByZWFkLmNzdigiY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMvdGltZV9zZXJpZXNfY292aWQxOV9kZWF0aHNfZ2xvYmFsLmNzdiIpCmNvdmlkLnJlY292ZXJlZCA8LSByZWFkLmNzdigiY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMvdGltZV9zZXJpZXNfY292aWQxOV9yZWNvdmVyZWRfZ2xvYmFsLmNzdiIpCgpjb3VudHJ5Lm5hbWVzIDwtIGMoIlN3aXR6ZXJsYW5kIiwgIkl0YWx5IiwgIkZyYW5jZSIsICJHZXJtYW55IiwgIkF1c3RyaWEiICwgIlNwYWluIiwgIkdyZWF0IEJyaXRhaW4iLCAiRGVubWFyayIsICJOb3J3YXkiLCAiU3dlZGVuIiwgIkljZWxhbmQiKQpjb3VudHJ5LmNvdW50IDwtIGxlbmd0aChjb3VudHJ5Lm5hbWVzKQpjb2wgPC0gcmFpbmJvdyhjb3VudHJ5LmNvdW50KQpsdHkgPC0gc2VxKDEsIGNvdW50cnkuY291bnQpCnBjaCA8LSBzZXEoMTAsIDEwICsgY291bnRyeS5jb3VudCkKCnN3aXR6ZXJsYW5kLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dpdHplcmxhbmQiKSkKc3dpdHplcmxhbmQuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dpdHplcmxhbmQiKSkKc3dpdHplcmxhbmQucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dpdHplcmxhbmQiKSkKCml0YWx5LmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSXRhbHkiKSkKaXRhbHkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSXRhbHkiKSkKaXRhbHkucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSXRhbHkiKSkKCmZyYW5jZS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkZyYW5jZSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmZyYW5jZS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJGcmFuY2UiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpmcmFuY2UucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRnJhbmNlIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKCmdlcm1hbnkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJHZXJtYW55IikpCmdlcm1hbnkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiR2VybWFueSIpKQpnZXJtYW55LnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkdlcm1hbnkiKSkKCmF1c3RyaWEuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJBdXN0cmlhIikpCmF1c3RyaWEuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQXVzdHJpYSIpKQphdXN0cmlhLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkF1c3RyaWEiKSkKCnNwYWluLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3BhaW4iKSkKc3BhaW4uZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3BhaW4iKSkKc3BhaW4ucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3BhaW4iKSkKCnVrLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiVW5pdGVkIEtpbmdkb20iICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQp1ay5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJVbml0ZWQgS2luZ2RvbSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCnVrLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlVuaXRlZCBLaW5nZG9tIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKCmRlbm1hcmsuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJEZW5tYXJrIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKZGVubWFyay5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJEZW5tYXJrIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKZGVubWFyay5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJEZW5tYXJrIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKCm5vcndheS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKbm9yd2F5LmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKbm9yd2F5LnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKCnN3ZWRlbi5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlN3ZWRlbiIpKQpzd2VkZW4uZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dlZGVuIikpCnN3ZWRlbi5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJTd2VkZW4iKSkKCmljZWxhbmQuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCmljZWxhbmQuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQppY2VsYW5kLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKCmNvdW50cmllcy5jb25maXJtZWQgPC0gbGlzdChzd2l0emVybGFuZC5jb25maXJtZWQsIGl0YWx5LmNvbmZpcm1lZCwgZnJhbmNlLmNvbmZpcm1lZCwgZ2VybWFueS5jb25maXJtZWQsIGF1c3RyaWEuY29uZmlybWVkLCBzcGFpbi5jb25maXJtZWQsIHVrLmNvbmZpcm1lZCwgZGVubWFyay5jb25maXJtZWQsIG5vcndheS5jb25maXJtZWQsIHN3ZWRlbi5jb25maXJtZWQsIGljZWxhbmQuY29uZmlybWVkKQpjb3VudHJpZXMuZGVhdGhzIDwtIGxpc3Qoc3dpdHplcmxhbmQuZGVhdGhzLCBpdGFseS5kZWF0aHMsIGZyYW5jZS5kZWF0aHMsIGdlcm1hbnkuZGVhdGhzLCBhdXN0cmlhLmRlYXRocywgc3BhaW4uZGVhdGhzLCB1ay5kZWF0aHMsIGRlbm1hcmsuZGVhdGhzLCBub3J3YXkuZGVhdGhzLCBzd2VkZW4uZGVhdGhzLCBpY2VsYW5kLmRlYXRocykKY291bnRyaWVzLnJlY292ZXJlZCA8LSBsaXN0KHN3aXR6ZXJsYW5kLnJlY292ZXJlZCwgaXRhbHkucmVjb3ZlcmVkLCBmcmFuY2UucmVjb3ZlcmVkLCBnZXJtYW55LnJlY292ZXJlZCwgYXVzdHJpYS5yZWNvdmVyZWQsIHNwYWluLnJlY292ZXJlZCwgdWsucmVjb3ZlcmVkLCBkZW5tYXJrLnJlY292ZXJlZCwgbm9yd2F5LnJlY292ZXJlZCwgc3dlZGVuLmNvbmZpcm1lZCwgaWNlbGFuZC5yZWNvdmVyZWQpCgoKZGF5LmNvdW50IDwtIE5ST1coc3dpdHplcmxhbmQuY29uZmlybWVkKQpgYGAKCiMgRXZvbHV0aW9uIGluIFN3aXR6ZXJsYW5kIGFuZCBXZXN0ZXJuIEV1cm9wZQoKVGhlIGZpZ3VyZXMgZG8gbm90IHJlcHJlc2VudCB0aGUgc2FtZSB0aGluZyBpbiBlYWNoIGNvdW50cnksIGRlcGVuZGluZyBvbiB0aGUgZXh0ZW50IG9mIHRoZSBzY3JlZW5pbmcgdGVzdHMgY2FycmllZCBvdXQuIFJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLCB0aGUgd2Vla2x5IGFuZCBkYWlseSB0cmVuZCBjdXJ2ZXMgYWxsb3cgeW91IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBmb3Jlc2VlYWJsZSBldm9sdXRpb24gZm9yIHRoZSBuZXh0IGRheXMgKGFzc3VtaW5nIHRoYXQgdGhlIHNjcmVlbmluZyBzdHJhdGVneSBkb2VzIG5vdCBjaGFuZ2Ugb3ZlciB0aW1lKS4gUmVzcGVjdGl2ZWx5LCBpdCBwcm92aWRlcyBhbiBpbmRpY2F0aW9uIG9mIGEgcG9zc2libGUgaW5mbGVjdGlvbiBvZiB0aGUgcHJvZ3Jlc3Npb24gb2YgdGhlIGVwaWRlbWljIGluIHRoZSBuZWFyIGZ1dHVyZS4KCiMjIFN3aXR6ZXJsYW5kCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KHN3aXR6ZXJsYW5kLmNvbmZpcm1lZCwgc3dpdHplcmxhbmQuZGVhdGhzLCBzd2l0emVybGFuZC5yZWNvdmVyZWQsICJTd2l0emVybGFuZCIsIDU1LCBOQSwgdHJlbmQuYW5nbGUgPSAyKQpgYGAKCiMjIEl0YWx5CmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGl0YWx5LmNvbmZpcm1lZCwgaXRhbHkuZGVhdGhzLCBpdGFseS5yZWNvdmVyZWQsICJJdGFseSIsIE5BLCB0cmVuZC5hbmdsZSA9IDUpCmBgYAoKIyMgRnJhbmNlCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGZyYW5jZS5jb25maXJtZWQsIGdlcm1hbnkuZGVhdGhzLCBmcmFuY2UucmVjb3ZlcmVkLCAiRnJhbmNlIiwgNTMsIDU2LCB0cmVuZC5hbmdsZSA9IDApCmBgYAoKIyMgR2VybWFueQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShnZXJtYW55LmNvbmZpcm1lZCwgc3dpdHplcmxhbmQuZGVhdGhzLCBnZXJtYW55LnJlY292ZXJlZCwgIkdlcm1hbnkiLCA0OCwgTkEsIHRyZW5kLmFuZ2xlID0gNikKYGBgCgojIyBBdXN0cmlhCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGF1c3RyaWEuY29uZmlybWVkLCBhdXN0cmlhLmRlYXRocywgYXVzdHJpYS5yZWNvdmVyZWQsICJBdXN0cmlhIiwgNTIsIE5BLCB0cmVuZC5hbmdsZSA9IDMpCmBgYAoKIyMgU3BhaW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoc3BhaW4uY29uZmlybWVkLCBzcGFpbi5kZWF0aHMsIHNwYWluLnJlY292ZXJlZCwgIlNwYWluIiwgTkEsIDUzLCB0cmVuZC5hbmdsZSA9IDUpCmBgYAoKIyMgR3JlYXQgQnJpdGFpbgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeSh1ay5jb25maXJtZWQsIHVrLmRlYXRocywgdWsucmVjb3ZlcmVkLCAiR3JlYXQgQnJpdGFpbiIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSAyMikKYGBgCgojIyBEZW5tYXJrCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGRlbm1hcmsuY29uZmlybWVkLCBkZW5tYXJrLmRlYXRocywgZGVubWFyay5yZWNvdmVyZWQsICJEZW5tYXJrIiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDEwKQpgYGAKCiMjIE5vcndheQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShub3J3YXkuY29uZmlybWVkLCBub3J3YXkuZGVhdGhzLCBub3J3YXkucmVjb3ZlcmVkLCAiTm9yd2F5IiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDApCmBgYAoKIyMgU3dlZGVuCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KHN3ZWRlbi5jb25maXJtZWQsIHN3ZWRlbi5kZWF0aHMsIHN3ZWRlbi5yZWNvdmVyZWQsICJTd2VkZW4iLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gMzApCmBgYAoKIyMgSWNlbGFuZApgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShpY2VsYW5kLmNvbmZpcm1lZCwgaWNlbGFuZC5kZWF0aHMsIGljZWxhbmQucmVjb3ZlcmVkLCAiSWNlbGFuZCIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSAwKQpgYGAKCiMgV2hhdCBIYXBwZW5lZCBpbiBIdWJlaSBQcm92aW5jZSAoQ2hpbmEpCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KaHViZWkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJDaGluYSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiSHViZWkiKSkKaHViZWkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQ2hpbmEiICYgUHJvdmluY2UuU3RhdGUgPT0gIkh1YmVpIikpCmh1YmVpLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkNoaW5hIiAmIFByb3ZpbmNlLlN0YXRlID09ICJIdWJlaSIpKQoKcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShodWJlaS5jb25maXJtZWQsIGh1YmVpLmRlYXRocywgaHViZWkucmVjb3ZlcmVkLCAiSHViZWkgUHJvdmluY2UsIENoaW5hIiwgTkEsIDIsIHRyZW5kLmFuZ2xlID0gMCkKYGBgCgojIFdoYXQgSXMgSGFwcGVuaW5nIGluIFVTQQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmdldF9zdW1fb2ZfdGltZXNlcmllc19hc192ZWN0b3JfZm9yX3VzYSA8LSBmdW5jdGlvbihkZiwgZXhsdWRlKSB7CiAgdG1wIDwtIGNvbFN1bXMoc3Vic2V0KGRmLCBzZWxlY3QgPSAtZXhsdWRlKSkKICB0bXAgPC0gc2FwcGx5KGFzLnZlY3Rvcih0cmFuc3Bvc2UoYXMubGlzdCh0bXApKSksIGFzLmludGVnZXIpCiAgcmV0dXJuKHRtcCkKfQoKY292aWQudXMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfY29uZmlybWVkX1VTLmNzdiIpCmNvdmlkLnVzLmRlYXRocyA8LSByZWFkLmNzdigiY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMvdGltZV9zZXJpZXNfY292aWQxOV9kZWF0aHNfVVMuY3N2IikKCnVzYS5jb25maXJtZWQgPC0gc3Vic2V0KGNvdmlkLnVzLCBpc28zID09ICJVU0EiKQp1c2EuZGVhdGhzIDwtIHN1YnNldChjb3ZpZC51cy5kZWF0aHMsIGlzbzMgPT0gIlVTQSIpCgp1c2EuY29uZmlybWVkIDwtIGdldF9zdW1fb2ZfdGltZXNlcmllc19hc192ZWN0b3JfZm9yX3VzYSh1c2EuY29uZmlybWVkLCBjKDE6MTEpKQp1c2EuZGVhdGhzIDwtIGdldF9zdW1fb2ZfdGltZXNlcmllc19hc192ZWN0b3JfZm9yX3VzYSh1c2EuZGVhdGhzLCBjKDE6MTIpKQoKcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeSh1c2EuY29uZmlybWVkLCB1c2EuZGVhdGhzLCBOQSwgIlVTQSIsIE5BLCBOQSwgdHJlbmQuYW5nbGU9MjUpCmBgYAoKIyBDb21wYXJpc29uIG9mIE51bWJlciBvZiBDb25maXJtZWQgQ2FzZXMgaW4gV2VzdGVybiBFdXJvcGUKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp4cmFuZ2UgPC0gYygzNSwgZGF5LmNvdW50KQptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKSwgbmEucm0gPSBUUlVFKQp9CnlyYW5nZSA8LSBjKDAsIG1heC55KQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiQ29uZmlybWVkIENhc2VzIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBDYXNlcyIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMSwgZGF5LmNvdW50KSwgY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dLCB0eXBlID0gImIiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IGx0eVtpXSwgcGNoID0gcGNoW2ldLCBsdyA9IDEpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gbHR5LCBwY2ggPSBwY2gsIHRpdGxlID0gIkNvdW50cnkiKQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYodGFpbChjb3VudHJpZXMuY29uZmlybWVkW1tpXV0pKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkgKiAyKQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IENvbmZpcm1lZCBDYXNlcyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZihjb3VudHJpZXMuY29uZmlybWVkW1tpXV0pLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gNCkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgRGVhdGhzIGluIFdlc3Rlcm4gRXVyb3BlCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KeHJhbmdlIDwtIGMoNDAsIGRheS5jb3VudCkKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5kZWF0aHNbW2ldXSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkRlYXRocyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgRGVhdGhzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgxLCBkYXkuY291bnQpLCBjb3VudHJpZXMuZGVhdGhzW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih0YWlsKGNvdW50cmllcy5kZWF0aHNbW2ldXSkpKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KQp5cmFuZ2UgPC0gYygwLCBtYXgueSAqIDIpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgRGVhdGhzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBEZWF0aHMgcGVyIERheSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZihjb3VudHJpZXMuZGVhdGhzW1tpXV0pLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gNCkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgUmVjb3ZlcmVkIENhc2VzIGluIFdlc3Rlcm4gRXVyb3BlCgpXQVJOSU5HOiBUaGUgZmlndXJlcyBzZWVtIHRvIGJlIHdyb25nIG9uIE1hcmNoIDIzLCAyMDIwLgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoNTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJSZWNvdmVyZWQgQ2FzZXMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGQgPC0gbnJvdyhjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pCiAgbGluZXMoc2VxKDEsIGQpLCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih0YWlsKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSkpKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KQp5cmFuZ2UgPC0gYygwLCBtYXgueSAqIDIpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZihjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gNCkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgQWN0aXZlIENhc2VzIGluIFdlc3Rlcm4gRXVyb3BlCgpXQVJOSU5HOiBUaGUgZmlndXJlcyBzZWVtIHRvIGJlIHdyb25nIG9uIE1hcmNoIDIzLCAyMDIwLgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgeSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkFjdGl2ZSBDYXNlcyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgQ2FzZXMiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgeSA8LSBjb3VudHJpZXMuY29uZmlybWVkW1tpXV0gLSAoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dICsgY291bnRyaWVzLmRlYXRoc1tbaV1dKQogIGxpbmVzKHNlcSgxLCBkKSwgeSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSBsdHlbaV0sIHBjaCA9IHBjaFtpXSwgbHcgPSAxKQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IGx0eSwgcGNoID0gcGNoLCB0aXRsZSA9ICJDb3VudHJ5IikKCm1pbi55IDwtIDAKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgeSA8LSBjb3VudHJpZXMuY29uZmlybWVkW1tpXV0gLSAoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dICsgY291bnRyaWVzLmRlYXRoc1tbaV1dKQogIHkgPC0gdGFpbCh5LCAxMCkKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKICBtaW4ueSA8LSBtaW4oYyhtaW4ueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMobWluLnksIG1heC55ICogMikKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIk5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IEFjdGl2ZSBDYXNlcyBwZXIgRGF5IikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBsaW5lcyhzZXEoMiwgZGF5LmNvdW50KSAtIDAuNDUgKyAwLjA4ICogaSwgZGlmZih5KSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDQpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKYGBgCgojIEFib3V0CgpBbGwgdGhlIGdyYXBocyBhYm92ZSBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgYnkgSm9obnMgSG9wa2lucyBDU1NFIChwcm92aWRlZCB0byB0aGUgcHVibGljIHN0cmljdGx5IGZvciBlZHVjYXRpb25hbCBhbmQgYWNhZGVtaWMgcmVzZWFyY2ggcHVycG9zZXMpLgoKVGhlIHNvdXJjZSBjb2RlIGZvciBnZW5lcmF0aW5nIHRoZSBncmFwaHMgaXMgYXZhaWxhYmxlIHVuZGVyIE1JVCBMaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL2NvdmlkXzE5X3dlc3Rlcm5fZXVyb3BlLlJtZC4KClRoZSBkYXRhIGFyZSBwcm92aWRlZCBhcyAqMjAxOSBOb3ZlbCBDb3JvbmF2aXJ1cyBDT1ZJRC0xOSAoMjAxOS1uQ29WKSBEYXRhIFJlcG9zaXRvcnkgYnkgSm9obnMgSG9wa2lucyBDU1NFKiAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9DU1NFR0lTYW5kRGF0YS9DT1ZJRC0xOSkuCgpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHBlLWRvY291cnQvQ09WSUQtMTkvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIGZvciBtb3JlIGRldGFpbHMuCgojIyBEYXRhIFNvdXJjZXMKCiogV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiAoV0hPKTogaHR0cHM6Ly93d3cud2hvLmludC8KKiBEWFkuY24uIFBuZXVtb25pYS4gMjAyMC4gaHR0cDovLzNnLmR4eS5jbi9uZXdoNS92aWV3L3BuZXVtb25pYS4KKiBCTk8gTmV3czogaHR0cHM6Ly9ibm9uZXdzLmNvbS9pbmRleC5waHAvMjAyMC8wMi90aGUtbGF0ZXN0LWNvcm9uYXZpcnVzLWNhc2VzLwoqIE5hdGlvbmFsIEhlYWx0aCBDb21taXNzaW9uIG9mIHRoZSBQZW9wbGXigJlzIFJlcHVibGljIG9mIENoaW5hIChOSEMpOgoqIGh0dHA6Ly93d3cubmhjLmdvdi5jbi94Y3MveXF0Yi9saXN0X2d6YmQuc2h0bWwKKiBDaGluYSBDREMgKENDREMpOiBodHRwOi8vd2Vla2x5LmNoaW5hY2RjLmNuL25ld3MvVHJhY2tpbmd0aGVFcGlkZW1pYy5odG0KKiBIb25nIEtvbmcgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmNocC5nb3YuaGsvZW4vZmVhdHVyZXMvMTAyNDY1Lmh0bWwKKiBNYWNhdSBHb3Zlcm5tZW50OiBodHRwczovL3d3dy5zc20uZ292Lm1vL3BvcnRhbC8KKiBUYWl3YW4gQ0RDOiBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vY2RjLmdvdi50dy8yMDE5bmNvdi90YWl3YW4/YXV0aHVzZXI9MAoqIFVTIENEQzogaHR0cHM6Ly93d3cuY2RjLmdvdi9jb3JvbmF2aXJ1cy8yMDE5LW5jb3YvaW5kZXguaHRtbAoqIEdvdmVybm1lbnQgb2YgQ2FuYWRhOiBodHRwczovL3d3dy5jYW5hZGEuY2EvZW4vcHVibGljLWhlYWx0aC9zZXJ2aWNlcy9kaXNlYXNlcy9jb3JvbmF2aXJ1cy5odG1sCiogQXVzdHJhbGlhIEdvdmVybm1lbnQgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmhlYWx0aC5nb3YuYXUvbmV3cy9jb3JvbmF2aXJ1cy11cGRhdGUtYXQtYS1nbGFuY2UKKiBFdXJvcGVhbiBDZW50cmUgZm9yIERpc2Vhc2UgUHJldmVudGlvbiBhbmQgQ29udHJvbCAoRUNEQyk6IGh0dHBzOi8vd3d3LmVjZGMuZXVyb3BhLmV1L2VuL2dlb2dyYXBoaWNhbC1kaXN0cmlidXRpb24tMjAxOS1uY292LWNhc2VzCiogTWluaXN0cnkgb2YgSGVhbHRoIFNpbmdhcG9yZSAoTU9IKTogaHR0cHM6Ly93d3cubW9oLmdvdi5zZy9jb3ZpZC0xOQoqIEl0YWx5IE1pbmlzdHJ5IG9mIEhlYWx0aDogaHR0cDovL3d3dy5zYWx1dGUuZ292Lml0L251b3ZvY29yb25hdmlydXMKCiMjIFRlcm1zIG9mIFVzZQoKKiBEYXRhIDogQ29weXJpZ2h0IDIwMjAgSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5LCBhbGwgcmlnaHRzIHJlc2VydmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5L2Jsb2IvbWFzdGVyL1JFQURNRS5tZC4KKiBTb3VyY2UgY29kZSBmb3IgZ2VuZXJhdGluZyBncmFwaHM6IENvcHlyaWdodCBQaGlsaXBwZSBEb2NvdXJ0LiBMaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL2NvdmlkXzE5X3dlc3Rlcm5fZXVyb3BlLlJtZC4KKiBHcmFwaGljcyA6IFB1YmxpYyBEb21haW4KCg==